import os
from configparser import ConfigParser
from datetime import datetime
from utils.timer import format  # 若 timer.format 是日期格式化函数，需正确使用


class ConfigManager:
    """项目路径配置管理"""

    def __init__(self):
        # 获取项目根目录（基于当前文件的真实路径）

        self.dir_curr = os.path.abspath(__file__)
        self.dir_conf = os.path.dirname(self.dir_curr)
        self.dir_base = os.path.dirname(self.dir_conf)  # 项目根目录

        # 项目各目录路径（使用真实本地路径）
        self.dir_comm = os.path.join(self.dir_base, "common")
        self.dir_util = os.path.join(self.dir_base, "utils")
        self.dir_element = os.path.join(self.dir_base, "page_element")
        self.dir_driver = os.path.join(self.dir_base, "driver")

        self.web_url = self._get_web_url()

    def _get_web_url(self):
        #从web_cfg.ini中读取网址
        config = ConfigParser()
        config.read(self.web_ini_file)

        base_url = config.get('host','base_url')
        login_path = config.get('host','login_path',fallback='/')
        return base_url+login_path


    @property
    def web_ini_file(self):
        """Web配置文件路径"""
        ini_file = os.path.join(self.dir_conf, 'web_cfg.ini')
        if not os.path.exists(ini_file):
            raise FileNotFoundError(f"配置文件{ini_file}不存在!")
        return ini_file


    @property
    def dir_report_json(self):
        #allure报告目录
        report_dir = os.path.join(self.dir_base,'report')
        os.makedirs(report_dir, exist_ok=True)
        json_dir = os.path.join(report_dir,'json')
        os.makedirs(json_dir, exist_ok=True)
        return json_dir

    @property
    def dir_report_html(self):
        """Allure HTML报告目录"""
        report_dir = os.path.join(self.dir_base, 'report', 'html')
        os.makedirs(report_dir, exist_ok=True)
        return report_dir

    @property
    def dir_log(self):
        """日志目录"""
        log_dir = os.path.join(self.dir_base, 'logs')
        os.makedirs(log_dir, exist_ok=True)
        return log_dir

    @property
    def log_file(self):
        """日志文件（使用日期格式化）"""
        date_str = datetime.now().strftime('%Y%m%d')
        return os.path.join(self.dir_log, f'{date_str}.log')

    @property
    def dir_img(self):
        """截图目录"""
        img_dir = os.path.join(self.dir_log, 'images')
        os.makedirs(img_dir, exist_ok=True)
        return img_dir

    @property
    def img_file(self):
        """截图文件"""
        date_str = datetime.now().strftime('%Y%m%d_%H%M%S')
        return os.path.join(self.dir_img, f'screenshot_{date_str}.png')

    @property
    def dir_testdata(self):
        """测试数据目录"""
        test_data_dir = os.path.join(self.dir_base, 'testdata')
        os.makedirs(test_data_dir, exist_ok=True)
        return test_data_dir

    @property
    def dir_web_testdata(self):
        """Web测试数据目录"""
        test_data_dir = os.path.join(self.dir_testdata, 'web')
        os.makedirs(test_data_dir, exist_ok=True)
        return test_data_dir

    @property
    def test_web_yaml_file(self):
        """Web测试YAML数据文件"""
        yaml_file = os.path.join(self.dir_web_testdata, 'test_data.yaml')
        if not os.path.exists(yaml_file):
            raise FileNotFoundError(f'测试数据文件{yaml_file}不存在！')
        return yaml_file

    @property
    def test_web_json_file(self):
        #测试数据文件json
        json_file = os.path.join(self.dir_web_testdata, 'test_data.json')
        if not os.path.exists(json_file):
            raise FileNotFoundError("测试数据文件%s不存在"%json_file)
        return json_file

    @property
    def web_driver(self):
        """浏览器驱动路径"""
        os.makedirs(self.dir_driver, exist_ok=True)
        driver = os.path.join(self.dir_driver, 'geckodriver.exe')
        if not os.path.exists(driver):
            raise FileNotFoundError(f"浏览器驱动{driver}不存在！")
        return driver


cm = ConfigManager()
print(cm.web_url)
